Django তে FileField এবং ImageField ব্যবহার করা হয় ফাইল বা ছবি আপলোড করার জন্য। এই ফিল্ডগুলো মডেল ফর্মে ব্যবহার করা যেতে পারে, যাতে ইউজাররা ফাইল বা ছবি আপলোড করতে পারে। Django স্বয়ংক্রিয়ভাবে ফাইল আপলোড, স্টোর এবং ডেটাবেসে সংরক্ষণ করার জন্য প্রক্রিয়া পরিচালনা করে।
FileField এর ব্যবহার
FileField ব্যবহার করা হয় যেকোনো সাধারণ ফাইল (যেমন PDF, Word ডকুমেন্ট, ZIP ফাইল ইত্যাদি) আপলোড করার জন্য। Django এই ফিল্ডটির সাহায্যে ফাইল আপলোড এবং সংরক্ষণ করতে সাহায্য করে।
১. মডেলে FileField সংযোজন
প্রথমে আপনার মডেলে FileField ব্যবহার করে ফাইল ফিল্ড সংযোজন করতে হবে। উদাহরণ:
# models.py
from django.db import models
class Document(models.Model):
title = models.CharField(max_length=100)
uploaded_file = models.FileField(upload_to='documents/')
def __str__(self):
return self.title
এখানে:
uploaded_fileফিল্ডটিFileFieldহিসেবে ডিফাইন করা হয়েছে, যেখানেupload_to='documents/'নির্দেশ করে যে ফাইলটিdocuments/নামক সাবডিরেক্টরিতে সংরক্ষিত হবে (যাMEDIA_ROOTএর মধ্যে থাকবে)।
২. ফর্মে FileField ব্যবহার
এখন ফর্মে FileField ব্যবহার করা যাবে, যাতে ইউজার ফাইল আপলোড করতে পারে:
# forms.py
from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ['title', 'uploaded_file']
৩. ভিউ তৈরি করা
এবার আপনাকে ভিউ তৈরি করতে হবে, যাতে ফর্ম সাবমিট করা যায় এবং আপলোড করা ফাইল ডেটাবেসে সংরক্ষিত হয়:
# views.py
from django.shortcuts import render
from .forms import DocumentForm
def document_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return render(request, 'success.html')
else:
form = DocumentForm()
return render(request, 'upload.html', {'form': form})
request.FILESব্যবহার করা হয় ফর্মের ফাইল ডেটা গ্রহণ করতে।- ফর্মটি যদি সঠিকভাবে পূর্ণ হয়, তবে ফাইলটি ডেটাবেসে সংরক্ষিত হবে।
৪. টেমপ্লেট তৈরি করা
এখানে upload.html টেমপ্লেটের উদাহরণ:
<!-- upload.html -->
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
এখানে:
enctype="multipart/form-data"এই অ্যাট্রিবিউটটি ফর্মের মধ্যে ফাইল আপলোডের জন্য আবশ্যক।
ImageField এর ব্যবহার
ImageField মূলত চিত্র (image) আপলোড করার জন্য ব্যবহৃত হয়। এটি FileField এর মতোই কাজ করে, তবে এর সাথে অতিরিক্তভাবে ইমেজ ফাইল ভ্যালিডেশনও করা হয় (যেমন: ফাইলটি আসলেই একটি ইমেজ ফাইল কিনা)।
১. মডেলে ImageField সংযোজন
একটি ছবি আপলোড করার জন্য ImageField ব্যবহার করা হয়। উদাহরণ:
# models.py
from django.db import models
class Profile(models.Model):
user_name = models.CharField(max_length=100)
profile_picture = models.ImageField(upload_to='profile_pictures/')
def __str__(self):
return self.user_name
এখানে:
profile_pictureফিল্ডটিImageFieldহিসেবে ডিফাইন করা হয়েছে, যেখানেupload_to='profile_pictures/'নির্দেশ করে যে চিত্রটিprofile_pictures/সাবডিরেক্টরিতে সংরক্ষিত হবে।
২. ফর্মে ImageField ব্যবহার
এখন ফর্মে ImageField ব্যবহার করতে হবে, যাতে ইউজাররা ছবি আপলোড করতে পারে:
# forms.py
from django import forms
from .models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['user_name', 'profile_picture']
৩. ভিউ তৈরি করা
এবার আপনাকে ভিউ তৈরি করতে হবে, যাতে ফর্ম সাবমিট করা যায় এবং ছবি ডেটাবেসে সংরক্ষিত হয়:
# views.py
from django.shortcuts import render
from .forms import ProfileForm
def profile_upload(request):
if request.method == 'POST':
form = ProfileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return render(request, 'success.html')
else:
form = ProfileForm()
return render(request, 'upload_profile.html', {'form': form})
৪. টেমপ্লেট তৈরি করা
এখানে upload_profile.html টেমপ্লেটের উদাহরণ:
<!-- upload_profile.html -->
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload Profile Picture</button>
</form>
এখানে:
enctype="multipart/form-data"ব্যবহার করা হয়েছে, যাতে ইমেজ ফাইল আপলোড করা যায়।
ফাইল এবং চিত্রের জন্য মিডিয়া ফোল্ডার কনফিগারেশন
ফাইল এবং ইমেজ ফিল্ডগুলির ডেটা স্টোর করার জন্য আপনাকে settings.py ফাইলে MEDIA_ROOT এবং MEDIA_URL কনফিগার করতে হবে:
# settings.py
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
এটি Django কে বলে দেয় যে আপনার মিডিয়া ফাইলগুলো কোথায় সংরক্ষিত হবে এবং তারা কীভাবে অ্যাক্সেসযোগ্য হবে।
এছাড়া, আপনাকে আপনার urls.py ফাইলে মিডিয়া ফাইলগুলো সঠিকভাবে সার্ভ করার জন্য কনফিগার করতে হবে:
# urls.py
from django.conf import settings
from django.conf.urls.static import static
from django.urls import path
from . import views
urlpatterns = [
path('upload/', views.profile_upload, name='profile_upload'),
# অন্যান্য URL প্যাটার্ন
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
এটি মিডিয়া ফাইলগুলোকে সঠিকভাবে সার্ভ করার জন্য Django এর মধ্যে একটি URL প্যাটার্ন তৈরি করবে।
সারাংশ
- FileField এবং ImageField Django তে ফাইল এবং ছবি আপলোড করার জন্য ব্যবহৃত হয়।
- FileField যেকোনো সাধারণ ফাইল (যেমন PDF, DOCX) আপলোডের জন্য ব্যবহার হয়, এবং ImageField ইমেজ ফাইল আপলোড করার জন্য ব্যবহার হয়।
- Django স্বয়ংক্রিয়ভাবে ফাইল বা চিত্র আপলোড এবং সংরক্ষণ করার জন্য প্রয়োজনীয় ব্যবস্থা করে।
- MEDIA_ROOT এবং MEDIA_URL এর মাধ্যমে আপনি ফাইল সংরক্ষণের স্থান এবং অ্যাক্সেস URL কনফিগার করতে পারবেন।
Read more